package dao.permission;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import entities.permission.Permission;
import entities.permission.Role;
import entities.permission.RoleAndMenu;
import entities.permission.RoleAndPermission;
import entities.permission.UserAndRole;

/**
 * 
 * Permission SQL接口
 * @author hxl
 * 2018年11月26日
 */
public interface PermissionDao {
	/**
	 * 新增权限
	 * @param permission
	 */
    public void addPermission(@Param(value="permission")Permission permission);
    /**
     * 获得所有角色
     * @return
     */
	public List<Role> getRoles();
	/**
	 * 获得用户属于的角色
	 * @param userId 用户ID
	 * @return
	 */
	public List<Role> getRolesOfUser(@Param(value="userId")String userId);
	/**
	 * 添加角色和用户关系
	 * @param userAndRole 
	 */
	public void addUserAndRole(@Param(value="userAndRoles")List<UserAndRole> userAndRoles);
	/**
	 * 通过用户名获得角色和用户关系
	 * @param userId
	 * @return
	 */
	@Select("select * from userandrole where userId=#{userId}")
	public List<UserAndRole> getUserAndRole(@Param(value="userId")String userId);
	/**
	 * 批量删除用户和角色关系
	 * @param userAndRoleIds
	 */
	public void deleteUserAndRoles(@Param(value="userAndRoleIds")List<String> userAndRoleIds);
	/**
	 * 统计角色数量
	 * @param name 角色名
	 * @return
	 */
	public int getRoleCount(@Param(value="name")String name);
	/**
	 * 统计权限数量
	 * @param name
	 * @return
	 */
	public int getPermissionCount(@Param(value="name")String name);
	/**
	 * 获得角色分页列表
	 * @param name
	 * @param offset
	 * @param rows
	 * @return
	 */
	public List<Role> getRolePage(@Param(value="name")String name,@Param(value="offset")int offset,@Param(value="rows")int rows);
	/**
	 * 获得权限分页列表
	 * @param name
	 * @param offset
	 * @param rows
	 * @return
	 */
	public List<Permission> getPermissionPage(@Param(value="name")String name,@Param(value="offset")int offset,@Param(value="rows")int rows);
	/**
	 * 获得角色
	 * @param id
	 * @param name
	 * @return
	 */
	public Role getRole(@Param(value="id")String id,@Param(value="name")String name);
	/**
	 * 新增角色
	 * @param role
	 */
	public void addRole(@Param(value="role")Role role);
	/**
	 * 更新角色
	 * @param role
	 */
	public void updateRole(@Param(value="role")Role role);
	/**
	 * 批量删除
	 * @param idList
	 */
	public void deleteRoles(@Param("ids")List<String> idList);
	/**
	 * 获得角色和菜单关系
	 * @param roleId
	 * @return
	 */
	@Select("select * from roleandmenu where roleId=#{roleId}")
	public List<RoleAndMenu> getRoleAndMenu(@Param("roleId")String roleId);
	/**
	 * 新增角色和菜单关系
	 * @param roleandMenu
	 */
	public void addRoleAndMenu(@Param("roleandMenu")RoleAndMenu roleandMenu);
	/**
	 * 批量删除角色和菜单关系
	 * @param deleteSign
	 */
	public void deleteRoleAndMenus(@Param("roleAndMenuIds")List<String> roleAndMenuIds);
	/**
	 * 获得权限
	 * @param id
	 * @param name
	 * @return
	 */
	public Permission getPermission(@Param(value="id")String id,@Param(value="name")String name);
	/**
	 * 修改权限
	 * @param permission
	 */
	public void updatePermission(@Param(value="permission")Permission permission);
	/**
	 * 批量删除权限
	 * @param ids
	 */
	public void deletePermissions(@Param(value="ids")List<String> ids);
	/**
	 * 获得角色和权限关系
	 * @param roleId
	 * @return
	 */
	@Select("select * from roleandpermission where roleId=#{roleId}")
	public List<RoleAndPermission> getRoleAndPermissions(@Param(value="roleId")String roleId);
	/**
	 * 新增加色和权限关系
	 * @param roleAndPermission
	 */
	public void addRoleAndPermission(@Param(value="roleAndPermission")RoleAndPermission roleAndPermission);
	/**
	 * 批量删除角色和权限关系
	 * @param deleteRoleAndPermissionIds
	 */
	public void deleteRoleAndPermissions(@Param(value="ids")List<String> ids);
}
